package com.zjh.config;

import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 告诉spring mvc的 cors配置器，哪些URL路径应用跨域规则
        registry.addMapping("/**")
                //允许客户端请求中带任意自定义头。
                /*
                1.allowedHeaders("*") 虽然方便，但允许所有自定义头。
                2.如果后端只信任特定头部（如只接受 Authorization 和 Content-Type），可以更安全地写：
                .allowedHeaders("Content-Type", "Authorization", "X-Requested-With")
                3.当配合 allowCredentials(true) 时没安全冲突，因为 allowedHeaders 只是控制请求头，
                但依然建议在生产环境中只开放必要的头。
                 */
                .allowedHeaders("*")
                .allowedOrigins("*") //allowedOrigins("http://localhost:8080","https://example.com")
                .allowedMethods("*") //allowedMethods("GET", "POST", "PUT", "DELETE")
                /*
                1.registry.allowCredentials(true/false) 用来控制跨域请求时是否允许携带“凭证信息”，
                也就是浏览器是否可以在跨域请求中自动发送和接收以下内容：
                Cookie
                Authorization 头（如 Authorization: Bearer xxx）
                TLS 证书（客户端证书）

                2.allowCredentials(true)

                表示允许跨域请求携带凭证（Cookie / Authorization 头等），
                Spring 会在响应中加 Access-Control-Allow-Credentials: true。
                使用时必须同时指定 具体的 allowedOrigins，不能写 "*"，否则浏览器会拒绝或框架直接报错。

                 */
                .allowCredentials(false)
                // 设置预检请求的有效期，单位为秒
                .maxAge(3600);
    }
}
